home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / mroute.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  4KB  |  142 lines

  1. #ifndef __LINUX_MROUTE_H
  2. #define __LINUX_MROUTE_H
  3.  
  4. #include <linux/sockios.h>
  5. #include <linux/types.h>
  6.  
  7. /*
  8.  *    Based on the MROUTING 3.5 defines primarily to keep
  9.  *    source compatibility with BSD.
  10.  *
  11.  *    See the mrouted code for the original history.
  12.  *
  13.  *      Protocol Independent Multicast (PIM) data structures included
  14.  *      Carlos Picoto (cap@di.fc.ul.pt)
  15.  *
  16.  */
  17.  
  18. #define MRT_BASE    200
  19. #define MRT_INIT    (MRT_BASE)    /* Activate the kernel mroute code     */
  20. #define MRT_DONE    (MRT_BASE+1)    /* Shutdown the kernel mroute        */
  21. #define MRT_ADD_VIF    (MRT_BASE+2)    /* Add a virtual interface        */
  22. #define MRT_DEL_VIF    (MRT_BASE+3)    /* Delete a virtual interface        */
  23. #define MRT_ADD_MFC    (MRT_BASE+4)    /* Add a multicast forwarding entry    */
  24. #define MRT_DEL_MFC    (MRT_BASE+5)    /* Delete a multicast forwarding entry    */
  25. #define MRT_VERSION    (MRT_BASE+6)    /* Get the kernel multicast version    */
  26. #define MRT_ASSERT    (MRT_BASE+7)    /* Activate PIM assert mode        */
  27. #define MRT_PIM        (MRT_BASE+8)    /* enable PIM code    */
  28.  
  29. #define SIOCGETVIFCNT    SIOCPROTOPRIVATE    /* IP protocol privates */
  30. #define SIOCGETSGCNT    (SIOCPROTOPRIVATE+1)
  31. #define SIOCGETRPF    (SIOCPROTOPRIVATE+2)
  32.  
  33. #define MAXVIFS        32    
  34. typedef unsigned long vifbitmap_t;    /* User mode code depends on this lot */
  35. typedef unsigned short vifi_t;
  36. #define ALL_VIFS    ((vifi_t)(-1))
  37.  
  38. /*
  39.  *    Same idea as select
  40.  */
  41.  
  42. #define VIFM_SET(n,m)    ((m)|=(1<<(n)))
  43. #define VIFM_CLR(n,m)    ((m)&=~(1<<(n)))
  44. #define VIFM_ISSET(n,m)    ((m)&(1<<(n)))
  45. #define VIFM_CLRALL(m)    ((m)=0)
  46. #define VIFM_COPY(mfrom,mto)    ((mto)=(mfrom))
  47. #define VIFM_SAME(m1,m2)    ((m1)==(m2))
  48.  
  49. /*
  50.  *    Passed by mrouted for an MRT_ADD_VIF - again we use the
  51.  *    mrouted 3.6 structures for compatibility
  52.  */
  53.  
  54. struct vifctl {
  55.     vifi_t    vifc_vifi;        /* Index of VIF */
  56.     unsigned char vifc_flags;    /* VIFF_ flags */
  57.     unsigned char vifc_threshold;    /* ttl limit */
  58.     unsigned int vifc_rate_limit;    /* Rate limiter values (NI) */
  59.     struct in_addr vifc_lcl_addr;    /* Our address */
  60.     struct in_addr vifc_rmt_addr;    /* IPIP tunnel addr */
  61. };
  62.  
  63. #define VIFF_TUNNEL    0x1    /* IPIP tunnel */
  64. #define VIFF_SRCRT    0x2    /* NI */
  65. #define VIFF_REGISTER    0x4    /* register vif    */
  66.  
  67. /*
  68.  *    Cache manipulation structures for mrouted and PIMd
  69.  */
  70.  
  71. struct mfcctl
  72. {
  73.     struct in_addr mfcc_origin;        /* Origin of mcast    */
  74.     struct in_addr mfcc_mcastgrp;        /* Group in question    */
  75.     vifi_t    mfcc_parent;            /* Where it arrived    */
  76.     unsigned char mfcc_ttls[MAXVIFS];    /* Where it is going    */
  77.     unsigned int mfcc_pkt_cnt;        /* pkt count for src-grp */
  78.     unsigned int mfcc_byte_cnt;
  79.     unsigned int mfcc_wrong_if;
  80.     int         mfcc_expire;
  81. };
  82.  
  83. /* 
  84.  *    Group count retrieval for mrouted
  85.  */
  86.  
  87. struct sioc_sg_req
  88. {
  89.     struct in_addr src;
  90.     struct in_addr grp;
  91.     unsigned long pktcnt;
  92.     unsigned long bytecnt;
  93.     unsigned long wrong_if;
  94. };
  95.  
  96. /*
  97.  *    To get vif packet counts
  98.  */
  99.  
  100. struct sioc_vif_req
  101. {
  102.     vifi_t    vifi;        /* Which iface */
  103.     unsigned long icount;    /* In packets */
  104.     unsigned long ocount;    /* Out packets */
  105.     unsigned long ibytes;    /* In bytes */
  106.     unsigned long obytes;    /* Out bytes */
  107. };
  108.  
  109. /*
  110.  *    This is the format the mroute daemon expects to see IGMP control
  111.  *    data. Magically happens to be like an IP packet as per the original
  112.  */
  113.  
  114. struct igmpmsg
  115. {
  116.     __u32 unused1,unused2;
  117.     unsigned char im_msgtype;        /* What is this */
  118.     unsigned char im_mbz;            /* Must be zero */
  119.     unsigned char im_vif;            /* Interface (this ought to be a vifi_t!) */
  120.     unsigned char unused3;
  121.     struct in_addr im_src,im_dst;
  122. };
  123.  
  124. /*
  125.  *    That's all usermode folks
  126.  */
  127.  
  128.  
  129.  
  130. #define MFC_ASSERT_THRESH (3*HZ)        /* Maximal freq. of asserts */
  131.  
  132. /*
  133.  *    Pseudo messages used by mrouted
  134.  */
  135.  
  136. #define IGMPMSG_NOCACHE        1        /* Kern cache fill request to mrouted */
  137. #define IGMPMSG_WRONGVIF    2        /* For PIM assert processing (unused) */
  138. #define IGMPMSG_WHOLEPKT    3        /* For PIM Register processing */
  139.  
  140.  
  141. #endif
  142.